/**
 * User: qihailong
 * ProjectName : fabs-ui
 * FileName : Adapter
 * Date: 2018/8/1
 * Time: 15:56
 *
 */
class Adapter {
    constructor(conf){
        this.config = conf ;
    }
    init(){

    }
}

/**
 * 流程数据对象
 */
class WorkFLowData {
    constructor(conf){
        this.width = conf.width || 800 ;
        this.height = conf.width || 300 ;
        this.wfTypeId = conf.wfTypeId || ''; // 对应流程分类Id ,
        this.wfTypeName = conf.wfTypeName || ''; // 对应流程分类名称 ,
        this.wfBizDictId = conf.wfBizDictId || ''; //对应流程业务类型Id ,
        this.wfBizDictName = conf.wfBizDictName || ''; // 对应流程业务类型名称 ,
        this.wfDesc = conf.wfDesc || ''; // 流程描述描述 ,
        this.wfInfoId = conf.wfInfoId || ''; //  流程ID，流程新增，该字段将返回空 ,
        this.wfName =  conf.wfName || ''; // 流程名称
        this.wfNodeItemList = conf.wfNodeItemList || [] ; //  节点集合信息 ,
        this.wfNodeRelItemList = conf.wfNodeRelItemList || [] ; // 节点间关系集合信息
    }
}

/**
 * 节点数据对象
 */
class WfNodeItem {
    constructor(conf){
        this.formKey = conf.formKey || '' ; // 关联表单key ,
        this.nodeDesc = conf.nodeDesc || '' ; //  节点描述 ,
        this.nodeId = conf.uuid || ''; // 节点ID ,
        this.nodeName = conf.nodeName || ''; // 节点名称 ,
        this.nodeType = conf.nodeType || ''; // 节点类型（0：起始节点 1：中间节点 2：结束节点） ,
        this.wfBizDictName = conf.wfBizDictName || ''; // 对应流程业务类型名称 ,
        this.postcondition = conf.postcondition || ''; //  后置条件设置(JSON)：父节点前置条件为并发或鉴别的，该节点不允许设置后置条件；父节点前置条件为唯一的，该节点必须设置后置条件 ,
        this.precondition = conf.precondition || ''; //  前置条件设置(0：并发1：鉴别2：唯一)：当节点属性为并发或鉴别时，子节点不允许设置后置条件；当节点属性为唯一时，子节点必须设置后置条件 ,
        this.xcoordinate =  conf.position.x || ''; // x坐标 ,
        this.ycoordinate =  conf.position.y || ''; // y坐标 ,
        this.remindType = conf.remindType || '' ; // 提醒方式（11，第一位表示短信提醒，第二位表示消息提醒）,
        this.participantType = conf.participantType || '' ; // 参与者类型（0：人员，1：角色，2：部门）,
        this.participantId = conf.participantId || '' ; // 参与者ID(人员时为人员Id，部门为部门ID，角色为角色Id),
        this.participantName = conf.participantName || '' ; // 参与者名称(人员时为人员姓名，部门为部门名称，角色为角色名称)
    }
}
class WfNodeRelItem {
   constructor(conf){
       this.nodeId = conf.nodeId || '' ; // 节点ID ,
       this.parentNodeId = conf.parentNodeId || '' ; //  父节点ID ,
       this.state = conf.state || ''; //节点关系状态（0：未启动 1：待办 2：通过 3：不通过 4：回退 5：不执行） ,
       this.wfNodeRelId = conf.wfNodeRelId || ''; // 工作流模版节点中间表主键ID
   }
}

/**
 * 根据canvas Node数据 拼接为驱动流程图组件的数据
 */
class NodeAdapter extends Adapter{
    constructor(conf){
        super(conf);
    }
    init(){

    }
    getAdapterData(){
        let nodeArr = new Set() ;
        let lineArr =  new Set() ;
        this.config.wfd.forEach(node=>{
            nodeArr.add(node);
            node.connectLineMap.forEach(line=>{
                lineArr.add(line);
            })
        });

        let workFLowData = new WorkFLowData({}) ;
        nodeArr.forEach(node=>{
            let wfNodeItem = new WfNodeItem(node);
            workFLowData.wfNodeItemList.push(wfNodeItem);
        });
        lineArr.forEach(line=>{
            let wfNodeRelItem = new WfNodeRelItem({
                nodeId:line.conf.toNode.uuid,
                parentNodeId:line.conf.fromNode.uuid,
                state:0,
                wfNodeRelId:'',
            });
            workFLowData.wfNodeRelItemList.push(wfNodeRelItem);
        })
        return workFLowData;

    }
}

/**
 * 根据后台传回来的流程数据，canvas 数据
 */
class WorkFlowAdapter extends Adapter{
    constructor(conf){
        super(conf);
    }
    init(){

    }
}
export  {
    NodeAdapter,
    WorkFlowAdapter,
}
